#include "stm32f10x.h"                  // Device header
#include "MyFlash.h"
/*SRAM数组掉电不丢失实现*/

#define SRAM_FLAG 0x0722                // 0x0722是自定义标志位，用于判断是否是第一次启动
#define SRAM_START_ADDRESS 0x0800FC00


uint16_t SRAM_Data[512];                // 这个数组的信息在被修改的时候请注意不要修改第一个数据，那是标志位啦喂喂喂！！！

void Store_Init(void)
{
    uint16_t i;
    // 检测是否是第一次启动 是的话就初始化
    if (MyFlash_ReadHalfWord(SRAM_START_ADDRESS) != SRAM_FLAG)                 
    {
        MyFlash_ErasePage(SRAM_START_ADDRESS);
        MyFlash_ProgramHalfWord(SRAM_START_ADDRESS, SRAM_FLAG);
        for (i = 1; i < 512; i++)
        {
            SRAM_Data[i] = 0;
        }
    }

    // 从Flash中读取数据到SRAM
    for (i = 0; i < 512; i++)
    {
        SRAM_Data[i] = MyFlash_ReadHalfWord(SRAM_START_ADDRESS + i * 2);
    }

}

// 将SRAM中的数据保存到Flash
void Store_Save(void)
{
    uint16_t i;
    MyFlash_ErasePage(SRAM_START_ADDRESS);
    for (i = 0; i < 512; i++)
    {
        MyFlash_ProgramHalfWord(SRAM_START_ADDRESS + i * 2, SRAM_Data[i]);
    }
}

// 清空SRAM数据 保留标志位
void Store_Clear(void)
{
    uint16_t i;
    for (i = 1; i < 512; i++)
    {
        SRAM_Data[i] = 0;
    }
    Store_Save();
}
